package Gestores.DtoObjects;

import Gestores.DaoInterfaces.TelefonoDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadTelefono;
import Gestores.NucleoBaseDatos;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class TelefonoDTO implements TelefonoDAO {

    private DataBaseLink gestor;

    public TelefonoDTO() {
        gestor = NucleoBaseDatos.getInstance();
    }

    @Override
    public ArrayList<Object> buscarPorId(String id) throws Exception {
        ResultSet resultado = gestor.executeSql("Call BuscarTelefonoPorIdAfiliado('" + id + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        ResultSet resultado = gestor.executeSql("Call BuscarTelefonoPorNumero(" + numero + "");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorTipo(char tipo) throws Exception {
        ResultSet resultado = gestor.executeSql("Call BuscarTelefonoPorTipo('" + tipo + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadTelefono eTelefono = (EntidadTelefono) objeto;
        gestor.executeSql("Call InsertarTelefono(" + eTelefono.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        Integer viejoNumero = (Integer) primaryKey;
        EntidadTelefono eTelefono = (EntidadTelefono) objeto;
        gestor.executeSql("Call ActualizarTelefono(" + viejoNumero + "," + eTelefono.cadenaParaActualizacion() + ");");
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        EntidadTelefono eTelefono = (EntidadTelefono) objeto;
        gestor.executeSql("Call EliminarTelefono(" + eTelefono.cadenaParaEliminacion() + ");");
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        ResultSet resultSet = gestor.executeSql("Call ListarTelefonos()");
        return devolverListaCargada(resultSet);
    }

    private ArrayList<Object> devolverListaCargada(ResultSet resultado) throws SQLException {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (resultado.next()) {
            EntidadTelefono eTelefono = new EntidadTelefono(
                    resultado.getString(1),
                    resultado.getInt(2),
                    resultado.getString(3).charAt(0));
            lista.add(eTelefono);
        }
        return lista;
    }

    @Override
    public boolean existe(int numero) throws Exception {
        ResultSet resultSet = gestor.executeSql("Select ExisteTelefono(" + numero + ");");
        resultSet.next();
        return resultSet.getBoolean(1);
    }
}
